// 接收一个对象作为参数
// 返回值是一个promise对象(.then方式调用)
// 根据传入的参数，选择不同的请求方式和请求地址
const myAxios = function (config) {
  return new Promise((resolve, reject) => {
    // console.log(config)
    const { method, url, data, params } = config
    //1.创建
    const xhr = new XMLHttpRequest()

    // 判断是get还是post请求

    if (method.toUpperCase() === 'GET') {
      // 字符串处理
      const str = setParams(params)
      // 2.调用open()
      xhr.open('GET', params ? url + '?' + str : url)
      // 3.调用send
      xhr.send()
    } else {
      // 2.调用open()
      xhr.open('POST', url)

      let flag = Object.prototype.toStringify.call(data) === '[object Object]'
      // 3.设置请求头
      xhr.setRequestHeader(
        'Content-Type',
        flag ? 'application/json' : 'application/x-www-form-urlencoded'
      )
      // 4.调用send
      xhr.send(flag ? JSON.stringify(data) : data)
    }
    // 4.监听xhr的状态
    xhr.onreadystatechange = function () {
      if (xhr.readyState === 4) {
        if (xhr.status >= 200 && xhr.status < 300) {
          // 将请求的结果给到成功的结果
          resolve(JSON.parse(xhr.responseText))
        } else {
          reject('请求失败的状态码是' + xhr.status)
          // reject('失败')
        }
      }
    }
  })
}

// 如果你是查询字符串我把你接过来 转成键值对
function setParams(obj) {
  let arr = []
  for (let key in obj) {
    // console.log(key + '=' + obj[key])
    arr.push(key + '=' + obj[key])
  }
  // console.log(arr)
  return arr.join('&')
}

// setParams({ pname: '浙江省' })
